import { InjectionKey } from 'vue'

export interface WidgetConfig {
  type: string
  label?: string
  [key: string]: any
}

export interface PropertyEditor {
  prop: string
  component: any
  defaultValue?: any
}

export interface WidgetDescriptor {
  // 组件唯一标识
  type: string
  
  // 组件分类：container/field
  category: 'container' | 'field'
  
  // 组件图标
  icon: string
  
  // 是否生成FormItem包装
  formItem: boolean
  
  // 默认配置生成器
  initConfig: () => WidgetConfig
  
  // 属性编辑器列表
  propertyEditors: PropertyEditor[]
  
  // 配置校验规则
  validateConfig?: (config: WidgetConfig) => boolean
  
  // 组件预览图（可选）
  thumbnail?: string
  
  // 组件文档链接（可选）
  documentation?: string
}

export const WidgetInjectionKey: InjectionKey<{
  config: WidgetConfig
  parentConfig?: WidgetConfig
}> = Symbol('widget.context')